//
//  ListViewController.swift
//  CodingTest
//
//  Created by LYPC on 2021/11/18.
//

import UIKit

class ListViewController: BaseViewController {
    
    private let viewModel = ListViewModel()
    private let tableView = CTRefreshTableView()

    override func viewDidLoad() {
        super.viewDidLoad()
        setupLayout()
        setupStyle()
        setupReactive()
    }
}

// MARK: - Reactive
extension ListViewController {
    
    func setupReactive() {
        viewModel.getListData()
        tableView.reloadData()
    }
}

// MARK: - ********* tableView UITableViewDataSource、UITableViewDelegate
extension ListViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModel.models.count
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return viewModel.models[indexPath.row].cellHeight
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = ListCell.cell(withTableView: tableView, indexPath: indexPath)
        cell.configure(viewModel.models[indexPath.row])
        return cell
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        viewModel.deselectRow(viewModel.models[indexPath.row])
    }
}

// MARK: - UI Setup
private extension ListViewController {
    
    func setupLayout() {
        view.addSubview(tableView)
        tableView.snp.makeConstraints { (m) in
            m.top.equalToSuperview().inset(kNavBtm)
            m.leading.trailing.bottom.equalToSuperview()
        }
    }
    
    func setupStyle() {
        navBar.leftView.isHidden = true
        navBar.title = "数据列表"
        tableView.do { (v) in
            v.tableHeaderView = UIView()
            v.tableFooterView = UIView()
            v.backgroundColor = .color(.white)
            v.delegate = self
            v.dataSource = self
            v.keyboardDismissMode = .onDrag
            v.register(ListCell.self,
                       forCellReuseIdentifier: ListCell.reuseID)
        }
        tableView.addError()
    }
}
